int dest_off_x, int dest_off_y,
GdkRegion *region, /* In impl window coords */
int dx, int dy);
+static void gdk_window_invalidate_in_parent (GdkWindowObject *private);
static gpointer parent_class = NULL;
if (private->parent)
{
GdkWindowObject *parent_private = (GdkWindowObject *)private->parent;
+
if (parent_private->children)
parent_private->children = g_list_remove (parent_private->children, window);
+
+ if (!recursing &&
+ GDK_WINDOW_IS_MAPPED (window))
+ {
+ recompute_visible_regions (private, TRUE, FALSE);
+ gdk_window_invalidate_in_parent (private);
+ }
}
gdk_window_free_paint_stack (window);
if (!save_region)
gdk_region_destroy (update_area);
}
+
+ if (private->outstanding_moves)
+ {
+ /* Flush any outstanding moves, may happen if we moved a window but got
+ no actual invalid area */
+ gdk_window_flush (window);
+ }
}
static void
}
impl_window = gdk_window_get_impl_window (private);
- if (impl_window->update_area &&
+ if ((impl_window->update_area ||
+ impl_window->outstanding_moves) &&
!impl_window->update_freeze_count &&
!gdk_window_is_toplevel_frozen (window))
{
{
gdk_region_subtract (impl_window->update_area, tmp_region);
- if (gdk_region_empty (impl_window->update_area))
+ if (gdk_region_empty (impl_window->update_area) &&
+ impl_window->outstanding_moves == NULL)
{
gdk_region_destroy (impl_window->update_area);
impl_window->update_area = NULL;
if (gdk_window_has_impl (private))
{
- if (!GDK_WINDOW_IS_MAPPED (window))
+ if (!was_mapped)
gdk_synthesize_window_state (window,
GDK_WINDOW_STATE_WITHDRAWN,
0);
- if (gdk_window_is_viewable (window))
+ if (!was_mapped && gdk_window_is_viewable (window))
show_all_visible_impls (private);
}
else
{
- if (GDK_WINDOW_IS_MAPPED (window))
- {
- /* If we're raising, need to invalidate even if we're already shown */
- if (raise && gdk_window_is_viewable (window) && !private->input_only)
- gdk_window_invalidate_rect (window, NULL, TRUE);
- }
- else
- {
- /* Wasn't visible already */
- private->state = 0;
- }
+ private->state = 0;
}
if (!was_mapped)
if (!was_mapped || raise)
{
- if (gdk_window_is_viewable (window))
- _gdk_syntesize_crossing_events_for_geometry_change (window);
-
recompute_visible_regions (private, TRUE, FALSE);
+
+ if (gdk_window_is_viewable (window))
+ {
+ _gdk_syntesize_crossing_events_for_geometry_change (window);
+ gdk_window_invalidate_rect (window, NULL, TRUE);
+ }
}
-
- if (!was_mapped && gdk_window_is_viewable (window))
- gdk_window_invalidate_rect (window, NULL, TRUE);
}
/**
/* Keep children in (reverse) stacking order */
gdk_window_raise_internal (window);
- GDK_WINDOW_IMPL_GET_IFACE (private->impl)->raise (window);
+ if (gdk_window_has_impl (private))
+ GDK_WINDOW_IMPL_GET_IFACE (private->impl)->raise (window);
recompute_visible_regions (private, TRUE, FALSE);
+
+ gdk_window_invalidate_rect (window, NULL, TRUE);
}
static void
/* Keep children in (reverse) stacking order */
gdk_window_lower_internal (window);
+ recompute_visible_regions (private, TRUE, FALSE);
+
if (gdk_window_has_impl (private))
GDK_WINDOW_IMPL_GET_IFACE (private->impl)->lower (window);
- else
- {
- gdk_window_invalidate_in_parent (private);
- _gdk_syntesize_crossing_events_for_geometry_change (window);
- }
- recompute_visible_regions (private, TRUE, FALSE);
+ _gdk_syntesize_crossing_events_for_geometry_change (window);
+ gdk_window_invalidate_in_parent (private);
}
/**
}
private->state = GDK_WINDOW_STATE_WITHDRAWN;
-
- /* Invalidate the rect */
- gdk_window_invalidate_in_parent (private);
}
+ recompute_visible_regions (private, TRUE, FALSE);
+
if (was_mapped)
{
if (private->event_mask & GDK_STRUCTURE_MASK)
_gdk_syntesize_crossing_events_for_geometry_change (GDK_WINDOW (private->parent));
}
- recompute_visible_regions (private, TRUE, FALSE);
+ /* Invalidate the rect */
+ gdk_window_invalidate_in_parent (private);
}
/**
_gdk_windowing_window_set_composited (window, composited);
recompute_visible_regions (private, TRUE, FALSE);
-
+
+ if (GDK_WINDOW_IS_MAPPED (window))
+ gdk_window_invalidate_in_parent (private);
+
private->composited = composited;
}